import 'package:dio/dio.dart';

class ErrorHandlerInterceptor extends Interceptor {
  @override
  Future<void> onError(DioError err, ErrorInterceptorHandler handler) async {
    // 在这里处理错误
    if (err.type == DioErrorType.badResponse) {
      // 如果是服务器返回了非2xx的状态码
      if (err.response?.statusCode == 401) {
        // 处理未授权的情况
        print('Unauthorized access.');
      } else if (err.response?.statusCode == 404) {
        // 处理找不到资源的情况
        print('Resource not found.');
      } else {
        // 其他状态码
        print('Server responded with ${err.response?.statusCode}');
      }
    } else if (err.type == DioErrorType.cancel) {
      // 请求被取消
      print('Request was canceled.');
    } else if (err.type == DioErrorType.connectionTimeout) {
      // 连接超时
      print('Connection timeout.');
    } else if (err.type == DioErrorType.receiveTimeout) {
      // 接收数据超时
      print('Receive timeout.');
    } else {
      // 其他类型的错误
      print('An error occurred: ${err.message}');
    }

    // 如果需要继续传播错误，可以调用handler.reject(err)
    handler.reject(err);
  }

  @override
  Future<void> onRequest(
      RequestOptions options, RequestInterceptorHandler handler) async {
    // 在这里处理请求
    print('Request URL: ${options.uri}');
    handler.next(options); // 继续执行请求
  }

  @override
  Future<void> onResponse(Response response, ResponseInterceptorHandler handler) async {
    // 在这里处理响应
    print('Response status: ${response.statusCode}');
    handler.next(response); // 继续执行响应
  }
}